package com.wyix.service;

import com.wyix.domain.Pet;

import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
import java.util.stream.Collectors;

/**
 * @author wangdx
 * @since 2025/8/5
 */
public class PetService {
    // 筛选已接种疫苗的宠物（传统方式）
    List<Pet> filterVaccinatedPets(List<Pet> pets) {
        return pets.stream()
                .filter(new Predicate<Pet>() {
                    @Override
                    public boolean test(Pet pet) {
                        return pet.isVaccinated();
                    }
                })
                .collect(Collectors.toList());
    }

    // com.example.service.PetService.java
    public List<Pet> filterVaccinatedPets1(List<Pet> pets) {
        // Lambda直接实现Predicate接口
        return pets.stream()
                .filter(pet -> pet.isVaccinated())  // 单参数省略括号，逻辑简洁
                .collect(Collectors.toList());
    }

    // com.example.service.PetService.java
    public List<Pet> sortPetsByAge(List<Pet> pets) {
        // Lambda实现Comparator接口
        pets.sort((p1, p2) -> Integer.compare(p1.getAge(), p2.getAge()));
        return pets;
    }

    // 进阶：按年龄倒序（方法引用优化）
    public List<Pet> sortPetsByAgeDesc(List<Pet> pets) {
        // 方法引用替代Lambda，更简洁
        pets.sort(Comparator.comparingInt(Pet::getAge).reversed());
        return pets;
    }

    // com.example.service.PetService.java
    public Map<String, Long> countPetsByType(List<Pet> pets) {
        return pets.stream()
                .collect(Collectors.groupingBy(
                        Pet::getType,  // 分组依据（类型）
                        Collectors.counting()  // 统计数量
                ));
    }
}
